/**
 * Created by Administrator on 2019/11/6.
 */
//导入vue包
import Vue from 'vue';

//导入vue-router包
import VueRouter from 'vue-router';
//手动安装vue-router
Vue.use(VueRouter);
//导入路由
import router from './router.js';

// 注册 vuex
import Vuex from 'vuex';
Vue.use(Vuex);
//当网站刚一打开的时候，就访问本地存储，把本地存储中的数据拿出来
var car = JSON.parse(localStorage.getItem('car') || '[]');
const store = new Vuex.Store({
  state:{
    //购物车数组
    car:car
  },
  mutations:{
      // 点击加入购物车，把商品信息，保存到 store 中的 car 上
      // 分析：
      // 1. 如果购物车中，之前就已经有这个对应的商品了，那么，只需要更新数量
      // 2. 如果没有，则直接把 商品数据，push 到 car 中即可
    addTocar(state,goods){
       // 假设 在购物车中，没有找到对应的商品
      var flag=false;
      state.car.some(item=>{
        if(item.id==goods.id){
          item.count+=parseInt(goods.count);
          flag=true;
          return flag;
        }
      })
      if(!flag){
        state.car.push(goods);
      }
      //当car更新之后，将数据保存到本地存储中
      //第一个参数是给保存的数据一个名字，第二个参数是保存的数据，需要时字符串类型的
      localStorage.setItem('car',JSON.stringify(state.car));
    },
    updatecar(state,goods){
      state.car.some(item=>{
        if(item.id==goods.id){
          item.count=parseInt(goods.count);
          return true;
        }
      })
      //当覆盖完成后，将更新的数据重新存储到localStorage中去
      localStorage.setItem('car',JSON.stringify(state.car));
    },
    //根据id把store中购物车对应的那条数据删除
    removefromcar(state,id){
      state.car.some((item,i)=>{
        // i是some方法的第二个参数，表示当前元素的索引值
        if(item.id==id){
          state.car.splice(i,1);
          return true;
        }
      })
      //当删除完毕之后，将数据重新上传到localStore中去
      localStorage.setItem('car',JSON.stringify(state.car));
    },
    //info是一个对象，里面包含需要更新的switch的id和selected状态
    updateSelect(state,info){
      state.car.some(item=>{
        if(item.id==info.id){
          item.select=info.selected;
        }
      })
      //当把选中框的状态更新完毕后，将其保存到localStore中去
      localStorage.setItem('car',JSON.stringify(state.car));
    }
  },
  getters:{  //getters相当于计算属性，也相当于过滤器，这里可以用它来监控购物车徽标数量
    getCount(state){
      var c=0;
      state.car.forEach(item => {
        c+=item.count;
      });
      return c;
    },
    getgoodsCount(state){
      var o={};
      state.car.forEach(item=>{
        o[item.id]=item.count;
      })
      return o;
    },
    getgoodsSelected(state){
      var s={};
      state.car.forEach(item=>{
        s[item.id]=item.select;
      })
      return s;
    },
    //计算购物车总件数和总金额
    getGoodsCountAndMount(state){
      var m={
        count:0,
        mount:0
      };
      state.car.forEach(item=>{
        if(item.select){
          m.count+=item.count;
          m.mount+=item.count*item.price;
        }
      })
      return m;
    }
  }
});



//导入app组件
import app from './app.vue';

// //按需导入Mint UI中的组件
// import { Header,Swipe, SwipeItem, Button,Lazyload} from 'mint-ui';
// Vue.component(Header.name, Header);
// //轮播图组件
// Vue.component(Swipe.name, Swipe);
// Vue.component(SwipeItem.name, SwipeItem);
// //Button组件
// Vue.component(Button.name, Button);
// //导入图片懒加载
// Vue.use(Lazyload);

//直接把mint-ui全部导入进来
import Mint from 'mint-ui';
Vue.use(Mint);

//导入图片预览插件
import VuePreview from 'vue-preview'
Vue.use(VuePreview)

//导入MUI中的css样式,与app中的tabbar组件相对应
import './lib/mui/css/mui.css';
import './lib/mui/css/icons-extra.css';

// 导入 vue-resource
import VueResource from 'vue-resource';
// 安装 vue-resource
Vue.use(VueResource);
//设置请求的根路径
Vue.http.options.root = 'http://www.liulongbin.top:3005'; 


// 导入格式化时间的插件
import moment from 'moment'
import { privateEncrypt } from 'crypto';
// 定义全局的过滤器
Vue.filter('dateFormat', function (dataStr, pattern = "YYYY-MM-DD HH:mm:ss") {
  return moment(dataStr).format(pattern);
})

var vm=new Vue({
    el:"#app",
    render:c=>c(app),
    router,
    store // 挂载 store 状态管理对象
});